保存/加载用户首选项configuration文件

我想添加保存/打开function,我写了一个小的Excel程序。 要使用该程序,用户必须填写数据并调整多个表单的设置。 我想保存到一个configuration文件,以便能够稍后加载它。

我应该如何构build这个SAVE / OPENfunction?

我的想法是通过简单的“链接”(例如=Sheet1!A1 )将input的数据和configuration分组在单张纸上(让我们将其命名为“ Entries ”)。 此表将被导出。

我将这些条目保存到一个新的.xls工作簿中:

 ActiveWorkbook.Sheets("Entries").Columns("A:B").copy Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'Paste only values 

但是,加载数据时遇到的挑战…

在网上有几个例子(见这里和那里 )显示如何做,但总是有同样的问题。 也就是说:如果我只是将已保存的工作簿中的数据(仅限于数据)复制到Entries表单中,则我所有的“链接”都将被删除。 有没有办法来同步数据?

或者是手动inputVBA中的所有单元格值并执行数百个范围副本(从导出的工作簿直接转到用户使用的单元格)的唯一解决scheme?

我有一个想法,可能不是一个完整的答案,但如果这听起来不错,我会详细说明一些…使用你的例子:

 ActiveWorkbook.Sheets("Entries").Columns("A:B").copy Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'Paste only values 

我会改变这个(不完整和未经testing的代码,但你应该明白):

 Dim CurSheet As WorkSheet Set CurSheet = ActiveWorkbook.Sheets("Entries") With Workbooks.Add Sheets(1).Range("A:B").value = CurSheet.Range("A:B").value Sheets(2).Range("A:B").value = "'" & CurSheet.Range("A:B").formula End With 

我在这里做的是将已有的值插入到新工作簿的第一张表格中(请参阅With块中的第一行),然后将公式的文本值放入第二个工作表,相同的位置(见第二行)。 通过这种方式,您可以保留这些值并查看它们来自哪里。 但是,这并不像你所要求的那样是同步的,因为你仍然需要操作新书第2页中的数据来对这些链接做任何有意义的事情。

这是否有助于/让你开始正确的方向?

这是find的解决scheme 。 非常感谢您的帮助!

保存条目…

 Set CurSheet = ActiveWorkbook.Sheets("Entries") maxEntries = 150 CurSheet.copy 'a new workbook is created Set wbDest = ActiveWorkbook wbDest.Sheets(1).Range("A1:B" & maxEntries).Value = CurSheet.Range("A1:B" & maxEntries).Value wbDest.Sheets(1).Range("C1:C" & maxEntries).Value = CurSheet.Range("B1:B" & maxEntries).Formula For i = 1 To maxEntries 'Removes the leading "=" from the formula tempCell = ActiveWorkbook.Sheets(1).Range("C" & i).Formula If Len(tempCell) > 1 Then wbDest.Sheets(1).Range("C" & i).Value = Right(tempCell, Len(tempCell) - 1) End If 'For empty cells If wbDest.Sheets(1).Range("B" & i).Value = 0 Then wbDest.Sheets(1).Range("B" & i).Value = "" End If Next i 

…并加载它们。

 fullFileName = Application.GetOpenFilename("Excel files (*.xls),*.xls", _ 1, "Projekt öffnen", , False) Workbooks.Open fullFileName Set wbSaved = ActiveWorkbook 'Data copy maxEntries = 150 For i = 4 To maxEntries If Not wbSaved.Sheets(1).Range("C" & i) = "" Then 'Skip the empty lines 'Parsing c = wbSaved.Sheets(1).Range("C" & i).Value l = Len(c) p = InStr(1, c, "!", vbTextCompare) 'position of the !, that separates the sheet name from the cell number cDestSheet = Mid(c, 1, p - 1) cDestCell = Mid(c, p + 1, -(p - l)) 'Copy wbMain.Sheets(cDestSheet).Range(cDestCell).Value = wbSaved.Sheets(1).Range("B" & i).Value End If Next i wbSaved.Close False