从关闭的Excel工作簿返回单元格值

从关闭的Excel工作簿返回单元格值,excel,vba,Excel,Vba,我从数据库中提取数据并手动将其输入Excel报告模板 我想用VBA代码查找导出的带数据的封闭Excel文件(Test.xls)(例如单元格中的B1:B21) 单元格中的数据B1:B21每行之间都有空格。因此,垂直方向上的一列将如下所示 Data1 Space Space Data2 .... 我希望将空格放入Excel报告文件中,并水平显示(A10:“Data1”,B10:“Data2”,C10:“data3”…),而不是垂直显示 出于安全原因,我无法将数据直接从数据库拉入E

我从数据库中提取数据并手动将其输入Excel报告模板

我想用VBA代码查找导出的带数据的封闭Excel文件(
Test.xls
)(例如单元格中的
B1:B21

单元格中的数据
B1:B21
每行之间都有空格。因此,垂直方向上的一列将如下所示

Data1  
Space  
Space  
Data2  
.... 
我希望将空格放入Excel报告文件中,并水平显示(
A10:“Data1”
B10:“Data2”
C10:“data3”
…),而不是垂直显示

出于安全原因,我无法将数据直接从数据库拉入Excel模板。

私有函数GetValue(路径、文件、工作表、参考、v)
Private Function GetValue(path, file, sheet, ref, v)

path = "C:\Documents and Settings\sdavis\Desktop\Index\XXX\Results"
file = "test.xls"
sheet = "Sheet1"
ref = "A1:R30"



 '   Retrieves a value from a closed workbook
Dim arg As String
Dim p As Integer
 '   Make sure the file exists
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
   GetValue = "File Not Found"
   Exit Function
End If








 '   Create the argument
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Cells(v, 2).Address(, , xlR1C1)



  '   Execute an XLM macro
GetValue = ExecuteExcel4Macro(arg)


End Function

Sub TestGetValue()

'Declare
Dim v As Integer

'Starting Point
 v = 21

'File Location
path = "C:\Documents and Settings\sdavis\Desktop\Index\XXX\Results"
file = "test"
sheet = "Sheet1"

  Application.ScreenUpdating = False


    For C = 1 To 15

      a = Cells(5, C).Address
      Cells(5, C) = GetValue(path, file, sheet, a, v)
       v = v + 3
     Next C


Application.ScreenUpdating = True
End Sub
path=“C:\Documents and Settings\sdavis\Desktop\Index\XXX\Results” file=“test.xls” sheet=“Sheet1” ref=“A1:R30” '从关闭的工作簿中检索值 作为字符串的Dim arg 作为整数的Dim p '确保该文件存在 如果正确(路径,1)“\”则路径=路径&“\” 如果Dir(路径和文件)=“”,则 GetValue=“未找到文件” 退出功能 如果结束 '创建参数 arg=“”&path&“[”&file&“]”&sheet&“!”&_ 范围(参考)。单元格(v,2)。地址(,xlR1C1) '执行XLM宏 GetValue=ExecuteExcel4Macro(arg) 端函数 子TestGetValue() "申报, 作为整数的Dim v "起点", v=21 '文件位置 path=“C:\Documents and Settings\sdavis\Desktop\Index\XXX\Results” file=“test” sheet=“Sheet1” Application.ScreenUpdating=False 对于C=1到15 a=单元(5,C).地址 单元格(5,C)=GetValue(路径、文件、工作表、a、v) v=v+3 下一个C Application.ScreenUpdating=True 端接头
我相信您需要打开xls才能真正从中读取,但如果在vba中执行,excel实例可能会被隐藏,即用户不会觉得正在打开另一个excel文件。查看并了解一下
转置
功能:)打开文件,将列复制/粘贴到新工作表,过滤空白,复制/粘贴特殊转置。请单击左侧的勾号接受此答案?这标志着问题已经解决;)