我正在为客户端编写一些代码,这些代码从许多不同布局的文件中提取数据。我想写一些对他来说非常灵活的东西。
因此,他将能够在单元格中编写例如y.offset(0,1)
,具体取决于数据的变量y
。
我还没有做出变量1
的原因是因为它,因此单元格可能包含也可能不包含多个& " blah blah"
基本上,我想知道是否可以在单元格中编写部分代码然后将它们拉出来并将它们合并到代码中。
例如:
Dim y as range
Dim x as range
Dim c as string
Set Y = Sheet1.range("G4")
c = sheet1.range("A1") [which contains the words y.offset(0,4)
Set x = c
这不起作用,但是我想知道是否可以采取任何措施来获得相同的结果。
答案 0 :(得分:1)
你需要的是一种递归和危险的
然后它应该得到这样一个递归和危险的答案
您可以使用VBA项目对象模型(请参阅here获取信息)并执行以下操作:
将项目设置为处理VBA对象模型
按照上面给出的链接简介中的所有步骤进行cpearson网站添加对项目的引用
免责声明:另请阅读
添加“帮助”模块
在项目中添加一个新模块并在“HelperModule”之后调用它(您可以根据需要调用它,但随后与所选名称保持一致)
然后将此代码添加到此新模块
中Function GetRange(refRng As Range) As Range
Set GetRange = refRng
End Function
Function SetToCellContent(refRng As Range, cellContent As String) As Range
UpdateCodeModule cellContent
Set SetToCellContent = HelpModule.GetRange(refRng)
End Function
Sub UpdateCodeModule(cellContent As String)
Dim CodeMod As VBIDE.CodeModule
Dim LineNum As Long
Set CodeMod = ActiveWorkbook.VBProject.VBComponents("HelperModule").CodeModule
LineNum = SearchCodeModuleLine(CodeMod, "Set GetRange")
CodeMod.ReplaceLine LineNum, " Set GetRange = " & cellContent
End Sub
Function SearchCodeModuleLine(CodeMod As VBIDE.CodeModule, FindWhat As String) As Long
Dim SL As Long ' start line
Dim SC As Long ' start column
Dim EL As Long ' end line
Dim EC As Long ' end column
Dim Found As Boolean
With CodeMod
SL = 1
EL = .CountOfLines
SC = 1
EC = 255
Found = .Find(Target:=FindWhat, StartLine:=SL, StartColumn:=SC, EndLine:=EL, EndColumn:=EC, wholeword:=True, MatchCase:=False, patternsearch:=False)
End With
SearchCodeModuleLine = SL
End Function
将此代码添加到主代码
Set x = SetToCellContent(y, c) '<--| call the function that will take care of updating code in 'GetRange()' function and returns a range relative to 'y' as per the "code" in 'c'