我在将CSV数据加载到当前活动工作簿时遇到问题,但是在单独的工作表中。
现在我正在将临时数据下载到这个单独的(隐藏)工作表中,并将在其他工作表中引用它。电子表格大约4MB,每天更新。
如何让VBScript将此CSV加载到静态命名的工作表中,该工作表将在加载前清除?
URLDownloadToFile 0, fileURL, "%tmp%\tmpExchDBData.csv", 0, 0
Dim dbSheet As Worksheet Dim targetSheet As Worksheet
Workbooks.Open文件名:=“%tmp%\ tmpExchDBData.csv”,_ 格式:= 2'使用逗号分隔符 设置dbSheet = ActiveSheet
设置targetSheet =工作簿(“Book1”)。表格(3)'无论你想要什么 把它移到
dbSheet.Move After:= targetSheet'dbSheet现在位于您的工作簿中。
'隐藏它。设置dbSheet = ActiveSheet dbSheet.Visible = xlSheetHidden
答案 0 :(得分:4)
导入CSV,特别是定期导入相同的CSV文件,可以通过将其定义为数据源来完成。选择所需的工作表,数据功能区,从文本。
一旦定义,您就会在连接属性中拥有非常有用的选项,例如“打开时刷新数据”或“每隔x分钟刷新一次”。
答案 1 :(得分:1)
我遇到了类似的问题。如果它有帮助,这是我最终得到的代码:
Sub Atualizar_B_BR_QSA_IC()
Application.ScreenUpdating = False 'speed up macro execution
Application.EnableEvents = False 'turn off other macros for now
Application.DisplayAlerts = False 'turn off system messages for now
'Atualizar base B_BR_QSA_IC
Dim base_1 As Workbook
Dim plan_1 As Worksheet
Dim nome_arquivo_1 As String
Dim destino_1 As Worksheet
nome_arquivo_1 = Application.ActiveWorkbook.Path & "\BR_QSA_Report_CC.csv"
Set destino_1 = ThisWorkbook.Worksheets("B_BR_QSA_IC")
Set base_1 = Workbooks.Open(Filename:=nome_arquivo_1, Local:=True)
Set plan_1 = base_1.Worksheets(1)
'Limpar a última linha, que é uma linha de totais e não queremos usar
plan_1.Cells(Rows.Count, "A").End(xlUp).EntireRow.Delete
'Caso o excel já não entenda corretamente na abertura, vamos fazer Texto para Colunas do csv
plan_1.Range("A1:A" & plan_1.Cells(Rows.Count, "A").End(xlUp).Row).TextToColumns _
Destination:=Range("A1"), DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(1, 4)
'Agora vamos copiar a base para o arquivo Master (após limpá-lo) e fechar a base sem salvar
destino_1.Range("B2:T" & destino_1.Cells(Rows.Count, "B").End(xlUp).Row).Clear
plan_1.Range("A3:S" & plan_1.Cells(Rows.Count, "A").End(xlUp).Row).Copy
destino_1.Range("B2").PasteSpecial xlPasteValuesAndNumberFormats
base_1.Close savechanges:=False
'Se não há fórmula nas colunas A e B após plugar a base, precisamos colocar até o tamanho da base
If IsEmpty(destino_1.Range("A" & destino_1.Cells(Rows.Count, "B").End(xlUp).Row)) Then
destino_1.Range("A2").Copy Destination:=destino_1.Range("A" & (destino_1.Cells(Rows.Count, "A").End(xlUp).Row + 1) _
& ":" & "A" & destino_1.Cells(Rows.Count, "B").End(xlUp).Row)
'Se já há, precisamos limpar até o tamanho da base
ElseIf Not IsEmpty(destino_1.Range("A" & (destino_1.Cells(Rows.Count, "B").End(xlUp).Row + 1))) Then
destino_1.Rows((destino_1.Cells(Rows.Count, "B").End(xlUp).Row + 1) & ":" & destino_1.Cells(Rows.Count, "A") _
.End(xlUp).Row).EntireRow.Delete
End If
'Maquiagem
destino_1.Cells.Font.Name = "Calibri"
destino_1.Cells.Font.Size = 8
destino_1.Rows.RowHeight = 11.25
Application.DisplayAlerts = True 'turn system alerts back on
Application.EnableEvents = True 'turn other macros back on
Application.ScreenUpdating = True 'refreshes the screen
End Sub