Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA用于输入框选择要形成的图纸_Vba_Excel - Fatal编程技术网

Excel VBA用于输入框选择要形成的图纸

Excel VBA用于输入框选择要形成的图纸,vba,excel,Vba,Excel,我下面有一个代码需要调整,因为我希望能够在输入框中输入我的工作表名称,并使其重新格式化工作表,并在我选择的工作表旁边输出 参见我尝试但失败的公式 Sub Chart() Dim wb As Workbook Dim wsRaw As Worksheet, wsResult As Worksheet Dim iRow As Byte, iCol As Byte, iResultRow As Byte, iRawCol As Byte Dim Result As String

我下面有一个代码需要调整,因为我希望能够在输入框中输入我的工作表名称,并使其重新格式化工作表,并在我选择的工作表旁边输出

参见我尝试但失败的公式

Sub Chart()
   Dim wb As Workbook
   Dim wsRaw As Worksheet, wsResult As Worksheet
   Dim iRow As Byte, iCol As Byte, iResultRow As Byte, iRawCol As Byte
   Dim Result As String

Result = InputBox("Provide a sheet name.")
Workbooks(wb).Sheets(Result).Select
Set wb = ThisWorkbook
     Set wsRaw = Application.ActiveSheet
   Set wsResult = Worksheets.Add(After:=Sheets(Worksheets.count))
   iRow = 2

 iResultRow = 2

  Do Until wsRaw.Cells(iRow, 1) = Empty

  wsResult.Cells(iResultRow, 1) = wsRaw.Cells(iRow, 1)
  wsResult.Cells(iResultRow + 1, 1) = wsRaw.Cells(iRow, 1)
  wsResult.Cells(iResultRow + 2, 1) = wsRaw.Cells(iRow, 1)

  wsResult.Cells(iResultRow, 2) = wsRaw.Cells(iRow, 2)
  wsResult.Cells(iResultRow + 1, 2) = wsRaw.Cells(iRow, 2)
  wsResult.Cells(iResultRow + 2, 2) = wsRaw.Cells(iRow, 2)

  wsResult.Cells(iResultRow, 3) = wsRaw.Cells(iRow, 3)
  wsResult.Cells(iResultRow + 1, 3) = wsRaw.Cells(iRow, 3)
  wsResult.Cells(iResultRow + 2, 3) = wsRaw.Cells(iRow, 3)

  wsResult.Cells(iResultRow, 4) = wsRaw.Cells(iRow, 4)
  wsResult.Cells(iResultRow + 1, 4) = wsRaw.Cells(iRow, 4)
  wsResult.Cells(iResultRow + 2, 4) = wsRaw.Cells(iRow, 4)

  wsResult.Cells(iResultRow, 5) = "Lender"
  wsResult.Cells(iResultRow + 1, 5) = "All"
  wsResult.Cells(iResultRow + 2, 5) = "Percent"

  iRawCol = 5
  iCol = 6
  Do Until iCol = 46
    wsResult.Cells(1, iCol) = Left(wsRaw.Cells(1, iRawCol), 9)
    wsResult.Cells(iResultRow, iCol) = wsRaw.Cells(iRow, iRawCol)
    wsResult.Cells(iResultRow + 1, iCol) = wsRaw.Cells(iRow, iRawCol + 1)
    wsResult.Cells(iResultRow + 2, iCol) = wsRaw.Cells(iRow, iRawCol + 2)
    iCol = iCol + 1
    iRawCol = iRawCol + 3
  Loop
iResultRow = iResultRow + 3
 iRow = iRow + 1
  Loop

    Sheets("Macros").Select
     End Sub

很抱歉,您可以将其置于vba代码的上下文中。我仍在学习它,可能更破坏了我的代码。thanksSet ResultRange=InputBox(“提供工作表名称”),键入:=8)语句返回时显示调试消息“编译错误:未找到命名参数”好的,我修改了您的原始代码。我将ws从字符串更改为工作表,并将set wb=thisworkbook移动到调用它之前进行设置。如果您有任何其他错误,请告诉我。我进入消息输入框,通过键入或单击实际工作表输入工作表名称时,返回错误“此工作表中的公式包含一个或多个无效引用。请验证您的公式是否包含有效的路径、工作簿、范围名称和单元格引用”。。感谢您迄今为止的帮助。由于我们将其声明为一个范围,并且因为我们正在为inputbox使用类型8,所以我们必须提供一个范围对象。基本上,当它们显示inputbox时,您应该能够选择/激活所需的工作表,然后单击实际单元格(您实际上可以单击一系列单元格或列)。这将在您的目的地工作表上为程序提供一个范围。然后程序将抓取父表并处理它。如果对你有效,请告诉我。
Sub Chart()
Dim wb As Workbook
Dim wsRaw As Worksheet, wsResult As Worksheet
Dim iRow As Byte, iCol As Byte, iResultRow As Byte, iRawCol As Byte
Dim Result As Worksheet, RangeResult As Range
Set wb = ThisWorkbook
Set ResultRange = Application.InputBox("Provide a sheet name.", Type:=8)
Set Result = ResultRange.Parent
wb.Result.Select

Set wsRaw = Application.ActiveSheet
Set wsResult = Worksheets.Add(After:=Sheets(Worksheets.Count))
iRow = 2

iResultRow = 2

Do Until wsRaw.Cells(iRow, 1) = Empty

wsResult.Cells(iResultRow, 1) = wsRaw.Cells(iRow, 1)
wsResult.Cells(iResultRow + 1, 1) = wsRaw.Cells(iRow, 1)
wsResult.Cells(iResultRow + 2, 1) = wsRaw.Cells(iRow, 1)

wsResult.Cells(iResultRow, 2) = wsRaw.Cells(iRow, 2)
wsResult.Cells(iResultRow + 1, 2) = wsRaw.Cells(iRow, 2)
wsResult.Cells(iResultRow + 2, 2) = wsRaw.Cells(iRow, 2)

wsResult.Cells(iResultRow, 3) = wsRaw.Cells(iRow, 3)
wsResult.Cells(iResultRow + 1, 3) = wsRaw.Cells(iRow, 3)
wsResult.Cells(iResultRow + 2, 3) = wsRaw.Cells(iRow, 3)

wsResult.Cells(iResultRow, 4) = wsRaw.Cells(iRow, 4)
wsResult.Cells(iResultRow + 1, 4) = wsRaw.Cells(iRow, 4)
wsResult.Cells(iResultRow + 2, 4) = wsRaw.Cells(iRow, 4)

wsResult.Cells(iResultRow, 5) = "Lender"
wsResult.Cells(iResultRow + 1, 5) = "All"
wsResult.Cells(iResultRow + 2, 5) = "Percent"

iRawCol = 5
iCol = 6
Do Until iCol = 46
wsResult.Cells(1, iCol) = Left(wsRaw.Cells(1, iRawCol), 9)
wsResult.Cells(iResultRow, iCol) = wsRaw.Cells(iRow, iRawCol)
wsResult.Cells(iResultRow + 1, iCol) = wsRaw.Cells(iRow, iRawCol + 1)
wsResult.Cells(iResultRow + 2, iCol) = wsRaw.Cells(iRow, iRawCol + 2)
iCol = iCol + 1
iRawCol = iRawCol + 3
Loop
iResultRow = iResultRow + 3
iRow = iRow + 1
Loop

Sheets("Macros").Select
End Sub