Vba能够通过读取ini文件控制控件的属性(大小、位置、字体、颜色、样式……)吗?代码怎么写?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vba能够通过读取ini文件控制控件的属性(大小、位置、字体、颜色、样式……)吗?代码怎么写?相关的知识,希望对你有一定的参考价值。

每次在vbe里写这些定义显得代码很多,不利于寻找、阅读、修改代码。如果每次能简单读取就解决问题,是不是看上去代码能简洁不少,使vbe里只留重要的代码?

参考技术A VBA必须通过调用WN32 API来实现INI文件的读写,把控件属性及其值在程序退出时写入INI文件,在程序加载时读取INI文件并设置控件属性。
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

'INI文件写

'参数:
'strSection:节名称
'strItem:项名称
'strValue:项的值
'strIniFile:INI文件
Private Function WriteIniFile(strSection,strItem,strValue,strIniFile) as Long
Dim lngWriteOk As Long

lngWriteOk = WritePrivateProfileString(strSection,strItem,strValue,strIniFile)
End Sub

'INI文件读
'参数:
'strSection:节名称
'strItem:项名称
'strDefValue:项的默认值
'strIniFile:INI文件
Private Function strReadIniFile(strSection,strItem,strDefValue,strIniFile) as String
Dim lngReadOk As Long
Dim strValue As String
Dim strReadValue As String
strValue=strDefValue

tmpReadValue = String(255, 0)
lngReadOk = GetPrivateProfileString(strSection, strItem, strDefValue, strReadValue, 256, strIniFile)
If lngReadOk then
strValue=trim(strReadValue)
end if
strReadIniFile=strValue
End Sub追问

比如设置组合框的高为14.25宽为163,向组合框添加111和222两个条目,设置一个变量(qwe),qwe的值设置为152.应该怎么写代码?麻烦帮我写一下带我入下门。

追答

程序开始运行时的部分代码,读取参数进行初始化:
Combox1.Height = strReadIniFile("外观","高度","14.25",App.Path & "\config.ini")
Combox1.Widtht = strReadIniFile("外观","宽度","163",App.Path & "\config.ini")

dim qwe
qwe=strReadIniFile("变量","qwe","162",App.Path & "\config.ini")

程序退出之前运行部分代码,存储运行时参数,供下一次运行时读取用于初始化
dim pValue as string
pValue=cstr(Combox1.Height)
WriteIniFile("外观","高度",pValue,App.Path & "\config.ini")

pValue=cstr(Combox1.Widtht)
WriteIniFile("外观","宽度",pValue,App.Path & "\config.ini")

WriteIniFile("变量","qwe",cstr(qwe),App.Path & "\config.ini")

自动生成的INI文件(config.ini)部分内容:
...
[外观]
高度=14.25
宽度=163

[变量]
qwe=152
...

追问

ds3602022@qq.com,能麻烦发一个实例给我吗?

本回答被提问者采纳
参考技术B 日月积累自然就熟练了。

读取和写入 .ini 文件的推荐方法

【中文标题】读取和写入 .ini 文件的推荐方法【英文标题】:Recommended way to read and write .ini files 【发布时间】:2010-10-14 04:38:32 【问题描述】:

VBA 中是否有任何方法可用于读取和写入 INI 文件?我知道我可以使用;

Open "C:\test.ini" For Input As #1

...并解析数据。相反,我想看看哪些工具已经可用。

我知道在 C# 中你可以做到...

 using INI;
 INIFile ini = new INIFile("C:\test.ini");

是否有 VBA 的等价物?

我正在 MS Access 2003 VBA 中尝试此操作。

【问题讨论】:

【参考方案1】:

这并不令人愉快,但您可以使用 Windows API。 Here's a link 和 another from MS。

【讨论】:

【参考方案2】:

FileSystemObject object 带有 [TextStream](http://msdn.microsoft.com/en-us/library/314cz14s(VS.85).aspx) 是在 VBA 中读写文本文件的通常推荐方法。

【讨论】:

真的吗?为什么要使用外部库(当然,我假设是后期绑定)来处理 VBA 本身提供的东西?有什么优势? 在我看来,它使代码更容易阅读。您可以使用 For ... Each 轻松遍历文件夹。 最好不要直接读写它们。 API 方法要好得多,因为它抽象了理解 INI 文件格式的需要。当 INI 文件已经存在时,编写代码来理解它是没有意义的。【参考方案3】:

Karl Peterson's kpini 拥有您可能需要的一切:API 声明、Cinifile 类,诸如此类。我会从它开始,然后根据口味对其进行变形,这应该不会花很长时间。

【讨论】:

【参考方案4】:

这是我们使用的一些代码 sn-ps,它应该可以帮助您理解这个想法。这些例程使用 API 调用。包含两个函数来读取/写入 ini 文件中特定部分的字符串设置。

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Public Function IniFileName() As String
  IniFileName = "c:\[yourpath here]\settings.ini"
End Function


Private Function ReadIniFileString(ByVal Sect As String, ByVal Keyname As String) As String
Dim Worked As Long
Dim RetStr As String * 128
Dim StrSize As Long

  iNoOfCharInIni = 0
  sIniString = ""
  If Sect = "" Or Keyname = "" Then
    MsgBox "Section Or Key To Read Not Specified !!!", vbExclamation, "INI"
  Else
    sProfileString = ""
    RetStr = Space(128)
    StrSize = Len(RetStr)
    Worked = GetPrivateProfileString(Sect, Keyname, "", RetStr, StrSize, IniFileName)
    If Worked Then
      iNoOfCharInIni = Worked
      sIniString = Left$(RetStr, Worked)
    End If
  End If
  ReadIniFileString = sIniString
End Function

Private Function WriteIniFileString(ByVal Sect As String, ByVal Keyname As String, ByVal Wstr As String) As String
Dim Worked As Long

  iNoOfCharInIni = 0
  sIniString = ""
  If Sect = "" Or Keyname = "" Then
    MsgBox "Section Or Key To Write Not Specified !!!", vbExclamation, "INI"
  Else
    Worked = WritePrivateProfileString(Sect, Keyname, Wstr, IniFileName)
    If Worked Then
      iNoOfCharInIni = Worked
      sIniString = Wstr
    End If
    WriteIniFileString = sIniString
  End If
End Function

【讨论】:

以上是关于Vba能够通过读取ini文件控制控件的属性(大小、位置、字体、颜色、样式……)吗?代码怎么写?的主要内容,如果未能解决你的问题,请参考以下文章

vba如何读取ini文件信息

excel用vba自动提取某个ini文件中的数字到制定单元格

vba 怎么读取系统剪贴板中的图片到image控件?

求C#代码,控制WPF控件颜色变化

delphi如何读取ini文件或txt文件到edit控件?

读取和写入 .ini 文件的推荐方法