gpt4 book ai didi

excel - Excel VBA错误类型 '13'类型不匹配

转载 作者:行者123 更新时间:2023-12-03 08:49:41 27 4
gpt4 key购买 nike

Option Explicit

#If VBA7 And Win64 Then
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" ( _
ByVal pCaller As LongPtr, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As LongPtr, _
ByVal lpfnCB As LongPtr _
) As Long
Private Declare PtrSafe Function DeleteUrlCacheEntry Lib "Wininet.dll" _
Alias "DeleteUrlCacheEntryA" ( _
ByVal lpszUrlName As String _
) As Long
#Else
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" ( _
ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long _
) As Long
Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
Alias "DeleteUrlCacheEntryA" ( _
ByVal lpszUrlName As String _
) As Long
#End If

Public Const ERROR_SUCCESS As Long = 0
Public Const BINDF_GETNEWESTVERSION As Long = &H10
Public Const INTERNET_FLAG_RELOAD As Long = &H80000000

'Global Variables for passing values b/w subs
Dim myPath As String
Dim folderPath As String
Dim folderLocation As Variant





Sub airtableCleaner()
Dim argCounter As Integer
Dim Answer As VbMsgBoxResult

Dim strProgramName As String
Dim strArgument As String
Dim shellCommand As String

folderPath = Application.ActiveWorkbook.Path 'Example C:/downloads
myPath = Application.ActiveWorkbook.FullName 'Example C:/downloads/book1.csv

'Ask user if they want to run macro
Answer = MsgBox("Run? Airtable - 1: primaryKey, 2: one image attachment", vbYesNo, "Run Macro")
If Answer = vbYes Then

folderLocation = Application.InputBox("Give a subfolder name for directory. E.G. Batch1")

'Creates new folder based on input
Dim strDir As String
strDir = folderPath & "\" & folderLocation

If Dir(strDir, vbDirectory) = "" Then
MkDir strDir
Else
MsgBox "Directory exists."
End If

'Cleanup to just amazons3 dl.airtable links
Columns("B:B").Select
Selection.Replace What:="* ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="(", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:=")", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

'Count Cells
Range("B2").Activate
Do
If ActiveCell.Value = "" Then Exit Do
ActiveCell.Offset(1, 0).Activate
argCounter = argCounter + 1

Loop

'Copy Image Links to new cells to format in Column C
Columns("B:B").Select
Selection.Copy
Columns("C:C").Select
ActiveSheet.Paste
Application.CutCopyMode = False

'Clean up links to only have names in Column C
Selection.Replace What:="https://dl.airtable.com/", Replacement:="", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False


'Cleanup Broken images using excelVBA downloader %5B1%5D = B1D
Columns("C:C").Select
Range("C40").Activate
Selection.Replace What:="%5B1%5D", Replacement:="B1D", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False


'Create Column D batch files
Range("D2").Formula = "=CONCATENATE(""COPY "",CHAR(34), " & folderPath & "\" & ", C2,CHAR(34),"" "", CHAR(34), " & _
Chr(34) & folderPath & "\" & folderLocation & "\" & Chr(34) & ",A2,"".png"",CHAR(34))"

Range("D2").Select
Selection.AutoFill Destination:=Range("D2:D" & argCounter + 1)

'Delete header row 1 information
Rows("1:1").Select
Selection.Delete Shift:=xlUp

'Repaste values back into column D removing formulas
Columns("D:D").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False

'Image downloader to source folder
Call dlStaplesImages

'Make the batch files using row data col D
Call ExportRangetoBatch

'Ask user to run bat file now or later
shellCommand = """" & folderPath & "\" & "newcurl.bat" & """"
Call Shell(shellCommand, vbNormalFocus)

End If
End Sub

'https://superuser.com/questions/1045707/create-bat-file-with-excel-data-with-vba , modified copypasta code

Sub ExportRangetoBatch()

Dim ColumnNum: ColumnNum = 4 ' Column D
Dim RowNum: RowNum = 1 ' Row to start on
Dim objFSO, objFile

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile(folderPath & "\newcurl.bat") 'Output Path

Dim OutputString: OutputString = ""

OutputString = "Timeout 3" & vbNewLine 'useful for error checking

Do
OutputString = OutputString & Replace(Cells(RowNum, ColumnNum).Value, Chr(10), vbNewLine) & vbNewLine 'Goes to new line in string, then creates another
RowNum = RowNum + 1
Loop Until IsEmpty(Cells(RowNum, ColumnNum))

OutputString = OutputString & "Timeout 3" 'useful for errorchecking


objFile.Write (OutputString)

Set objFile = Nothing
Set objFSO = Nothing

End Sub



'https://stackoverflow.com/questions/31359682/with-excel-vba-save-web-image-to-disk/31360105#31360105 , modified copypasta code

Sub dlStaplesImages()
Dim rw As Long, lr As Long, ret As Long, sIMGDIR As String, sWAN As String, sLAN As String

sIMGDIR = folderPath
'If Dir(sIMGDIR, vbDirectory) = "" Then MkDir sIMGDIR

With ActiveSheet '<-set this worksheet reference properly!
lr = .Cells(Rows.Count, 1).End(xlUp).Row
For rw = 1 To lr 'rw to last row, assume first row is not header

sWAN = .Cells(rw, 2).Value2
sLAN = sIMGDIR & Chr(92) & Trim(Right(Replace(sWAN, Chr(47), Space(999)), 999))

Debug.Print sWAN
Debug.Print sLAN

If CBool(Len(Dir(sLAN))) Then
Call DeleteUrlCacheEntry(sLAN)
Kill sLAN
End If

ret = URLDownloadToFile(0&, sWAN, sLAN, BINDF_GETNEWESTVERSION, 0&)

'Imported code to output success / fail
If ret = 0 Then
Range("E" & rw).Value = "File successfully downloaded"
Else
Range("E" & rw).Value = "Unable to download the file"
End If

'.Cells(rw, 5) = ret
Next rw
End With

End Sub

我有这组代码。上面的代码可以正常工作。基本上,它需要一些输入数据,转换数据,下载图像并输入.batch文件以重命名许多所有图像。

我遇到的问题是更改此行时:
Range("D2").Formula = "=CONCATENATE(""COPY "",CHAR(34),C2,CHAR(34),"" "", CHAR(34), " & _
Chr(34) & folderPath & "\" & folderLocation & "\" & Chr(34) & ",A2,"".png"",CHAR(34))"

到此新行:
Range("D2").Formula = "=CONCATENATE(""COPY "",CHAR(34), " & folderPath & "\" & ", C2,CHAR(34),"" "", CHAR(34), " & _
Chr(34) & folderPath & "\" & folderLocation & "\" & Chr(34) & ",A2,"".png"",CHAR(34))"

我在这里出错

Run-time error '13' :Type mismatch



在这行运行do循环
OutputString = OutputString & Replace(Cells(RowNum, ColumnNum).Value, Chr(10), vbNewLine) & vbNewLine 'Goes to new line in string, then creates another

最初, OutputString采用这样的迭代值:
COPY "foo.png" "C:\batch\foo2.png"
现在,我尝试这样做:
COPY "C:\foo.png" "C:\batch\foo2.png"
我唯一更改的是添加了一个更长的字符串值,必须要读取 outputString。我不确定为什么会有Type 13错误(变量数据类型不匹配)

最佳答案

将变量传递到VBA中的excel函数时,Excel的语法确实令人困惑。

发生的事情是我原本直接在excel公式中传递了folderPath变量(例如C:\ foo),当时我本应分别连接每个结果(这在我以前的解决方案中是不可能的)

所以我只使用了没有内置的excel函数重写了一组干净的代码

导致错误类型13代码语句的原始代码段:

Range("D2").Formula = "=CONCATENATE(""COPY "",CHAR(34), " & folderPath & "\" & ", C2,CHAR(34),"" "", CHAR(34), " & _
Chr(34) & folderPath & "\" & folderLocation & "\" & Chr(34) & ",A2,"".png"",CHAR(34))"

新的简洁易读/编辑代码:
For row = 2 To argCounter + 1
A = Cells(row, 1).Value
C = Cells(row, 3).Value

A = """" & folderPath & "\" & folderLocation & "\" & A & ".png" & """"
C = """" & folderPath & "\" & C & """"

Cells(row, 4).Value = "Copy " & C & " " & A
Next row

关于excel - Excel VBA错误类型 '13'类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44392133/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com