请各路大侠帮我看看这组代码怎么改,谢谢了。。

bloodguy 2017-05-10 08:48:12
    Private Sub Button_ChooseExcelFile_Click(sender As Object, e As EventArgs) Handles Button_ChooseExcelFile.Click
If 打开文件对话框.ShowDialog() = DialogResult.OK Then
EX_File.Text = 打开文件对话框.FileName
End If
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim EX文件名 As String = 打开文件对话框.FileName ''包含路径的文件名
xlswb = xlsapp.Workbooks.Open(EX文件名)
xlsws = xlswb.Worksheets(1)


Dim 行 = xlsws.UsedRange.Rows.Count
Dim i As Int64
Dim 全部数据(行 - 2, 1), 船名航次(行 - 2) As String
'把数据装到数组里

For i = 2 To 行

IMO = xlsws.Cells(i, 1).text
Voage = xlsws.Cells(i, 2).text
BL = xlsws.Cells(i, 3).text

全部数据(i - 2, 0) = xlsws.Cells(i, 1).text & xlsws.Cells(i, 2).text
全部数据(i - 2, 1) = xlsws.Cells(i, 3).text
船名航次(i - 2) = 全部数据(i - 2, 0)
'Console.WriteLine(全部数据(i - 2, 0) & 全部数据(i - 2, 1) & vbCrLf)
'Console.WriteLine(船名航次(i - 2))
Next
'对船名航次数值的1,2两列进行取唯一值操作
Dim listString As New List(Of String)()
For Each eachString As String In 船名航次
If Not listString.Contains(eachString) Then
listString.Add(eachString)
End If
Next
'最后从List里取出各个字符串进行操作
For Each eachString As String In listString
'打印每个字符串
'Console.Write(eachString)
Dim 单航次提单 As New ArrayList
For i = 0 To LBound(全部数据)
If 全部数据(i, 0) = eachString Then
单航次提单.Add(全部数据(i, 1))
IMO = xlsws.Cells(i + 2, 1).text
Voage = xlsws.Cells(i + 2, 2).text

End If
Next
' Console.Write(listString(0) & " " & listString(1) & " " & listString(2))//有三个航次
Call sendto(IMO, Voage, 单航次提单())
Next
xlswb.Close()

End Sub
Private Sub sendto(IMO As String, Voage As String, ByRef 报文() As String)

Console.Write(IMO, Voage)
For n = 0 To 报文.Length - 1
Console.Write(报文(n))
Next

End Sub
...全文
238 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
im战术 2017-05-14
  • 打赏
  • 举报
回复

            Dim 单航次提单 As New List(Of String)
            For i = 0 To LBound(全部数据)
                If 全部数据(i, 0) = eachString Then
                    单航次提单.Add(全部数据(i, 1))
                    IMO = xlsws.Cells(i + 2, 1).text
                    Voage = xlsws.Cells(i + 2, 2).text
 
                End If
            Next
            ' Console.Write(listString(0) & " " & listString(1) & " " & listString(2))//有三个航次
            Call sendto(IMO, Voage, 单航次提单.ToArray)

    'ByRef 报文()的ByRef在你的这个函数里面压根就没有重新赋值,把ByRef删了也更易读!不然就是误导了
    Private Sub sendto(IMO As String, Voage As String, 报文() As String) 
 
        Console.WriteLine(IMO, Voage)
        For Each n In 报文
            Console.Write(n)
        Next
 
    End Sub
zj_zwl 2017-05-11
  • 打赏
  • 举报
回复
引用 4 楼 bloodguy 的回复:
[quote=引用 3 楼 zj_zwl 的回复:]

Call sendto(IMO, Voage, 单航次提单.ToArray())
谢谢,好像可以了,不过数据类型子程序的要改成 Object。但是联系上下程序好像没有达到目的。[/quote] Dim 单航次提单 As new list(of string)
zj_zwl 2017-05-10
  • 打赏
  • 举报
回复

Call sendto(IMO, Voage, 单航次提单.ToArray())
bloodguy 2017-05-10
  • 打赏
  • 举报
回复
数组的做为参数传递给子程序sendto好像传递不了。请问是不是哪里有问题,初学自己看不出来。
shoppo0505 2017-05-10
  • 打赏
  • 举报
回复
要改成什么样?
bloodguy 2017-05-10
  • 打赏
  • 举报
回复
引用 3 楼 zj_zwl 的回复:

Call sendto(IMO, Voage, 单航次提单.ToArray())
谢谢,好像可以了,不过数据类型子程序的要改成 Object。但是联系上下程序好像没有达到目的。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧