2011-10-12 149 views
3

我已经在VS 2008 VB中创建了一个GUI(简单部分),它有两个文本框(一个用于选择目标Excel文件,另一个选择目标Excel文件)。他们都伴随着一个浏览按钮(使用OpenDialog浏览文件选择 - ReadOnly)。此外,我还有两个文本框,我已经重新调整大小以容纳row/s和column/s(如果用户想要复制单元格1-6和列A-D,它们只需输入1-6在第一个文本框中,AD在第二个文本框中)。最后,我在GUI底部有一个复制按钮,一旦所有字段都有相关数据,就按下复制按钮,复制选定的单元。我很困惑如何复制一个单元格或一系列单元格,通过提示用户输入数字和列以及如何真正实现复制单元格的逻辑。我看过一些例子,但是我没有成功地将它们应用到我的特定应用程序中。任何帮助表示赞赏...谢谢!如何将一个单元格或一个单元格范围从一个Excel电子表格复制到另一个VS 2008的Excel电子表格VB

VS 2008 VB代码:

Public Class Form1 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    End Sub 

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged 


    End Sub 

    Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk 
     Dim strm As System.IO.Stream 
     strm = OpenFileDialog1.OpenFile() 
     TextBox1.Text = OpenFileDialog1.FileName.ToString() 
     If Not (strm Is Nothing) Then 
      strm.Close() 
     End If 


    End Sub 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim selectedFile As String = String.Empty 
     If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then 
      selectedFile = OpenFileDialog1.FileName 
     End If 
    End Sub 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
     Dim selectedFile As String = String.Empty 
     If OpenFileDialog2.ShowDialog = Windows.Forms.DialogResult.OK Then 
      selectedFile = OpenFileDialog2.FileName 
     End If 
    End Sub 

    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged 

    End Sub 

    Private Sub OpenFileDialog2_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog2.FileOk 
     Dim strm As System.IO.Stream 
     strm = OpenFileDialog2.OpenFile() 
     TextBox2.Text = OpenFileDialog2.FileName.ToString() 
     If Not (strm Is Nothing) Then 
      strm.Close() 
     End If 
    End Sub 

     Private Sub CopyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Copy_Btn.Click 

    End Sub 
End Class 
+0

我在想我需要目标和目的地的行和列文本框。 – suffa

+0

工作表情况如何,您是否希望允许用户选择要复制的工作表,还是工作表在每个可打开的文件中始终保持一致? – Reafidy

+0

@Reafidy - 实际上,我没有想到这一点。理想情况下,我希望他们能够选择他们复制到/从的工作表。 – suffa

回答

0

如果我理解正确的话,你在如何采取行范围输入(例如,“1-5”)和列输入范围(主要是有兴趣的,例如“ AC“)并将这些输入定义的范围复制到另一个工作表(或工作簿?)中。我把一些VBA放在一起来展示你如何做到这一点。我没有花时间建立错误处理或输入验证,但对于正确格式化的输入,这种方法将起作用。请注意,我已将此示例代码设置为从活动工作簿的工作表1复制并粘贴到活动工作簿的工作表2中。

Sub promptncopy() 

Dim rowStr As String, colStr As String, tmpAdd As String 
Dim hypr As Integer, hypc As Integer 
Dim sIn As Worksheet, sOut As Worksheet 
Dim rIn As Range, rOut As Range 

'Input boxes for row and column ranges. It sounds like you already have some code like this. 
rowStr = InputBox("Enter row numbers you want to copy as range (e.g. 1-5).", "Enter Rows") 
If rowStr = "" Then 
    Exit Sub 
End If 
colStr = InputBox("Enter column letters you want to copy as range (e.g. A-E).", "Enter Columns") 
If colStr = "" Then 
    Exit Sub 
End If 

'Records position of hyphen in input strings. 
hypr = InStr(rowStr, "-") 
hypc = InStr(colStr, "-") 

'Combines colStr and rowStr to form appropriate address for input range. 
'Handles cases where colStr and/or rowStr are single values rather than ranges. 
If hypc <> 0 Then 
    If hypr <> 0 Then 
     tmpAdd = Left(colStr, hypc - 1) & Left(rowStr, hypr - 1) & ":" & Right(colStr, Len(colStr) - hypc) & Right(rowStr, Len(rowStr) - hypr) 
    Else 
     tmpAdd = Left(colStr, hypc - 1) & rowStr & ":" & Right(colStr, Len(colStr) - hypc) & rowStr 
    End If 
Else 
    If hypr <> 0 Then 
     tmpAdd = colStr & Left(rowStr, hypr - 1) & ":" & colStr & Right(rowStr, Len(rowStr) - hypr) 
    Else 
     tmpAdd = colStr & rowStr 
    End If 
End If 

'Sets In and Out sheets to first and second sheets in workbook, respectively. 
Set sIn = Sheets(1) 
Set sOut = Sheets(2) 
Set rIn = sIn.Range(tmpAdd) 
Set rOut = sOut.Range("A1").Resize(rIn.Rows.Count, rIn.Columns.Count) 
'Prints values (not formulas!) from input range to output range. 
rOut = rIn.Value 

End Sub 
+0

我仍然试图实现我的代码,没有忘记.... – suffa

相关问题