首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用excel和IBM3270终端

不使用excel和IBM3270终端
EN

Stack Overflow用户
提问于 2018-08-25 03:55:45
回答 1查看 138关注 0票数 0

我正在做一个宏来拉取收据的数据,我只需要找到今天收据的数量。使用IBM终端,我打开一个excel工作表,然后让IBM转到我需要的屏幕,然后查看屏幕上的日期,并将其与接收日期进行匹配。如果今天的日期与第一页上的接收日期不匹配,那么我需要让宏按enter,然后在第二页中搜索匹配的日期,依此类推,直到日期匹配,或者一旦接收日期为空,它们就永远不会停止。我的代码如下。不确定open函数在哪里不让代码结束。我是一个新手,对格式化代码一无所知,我提前道歉。

感谢您提供的任何帮助。

代码语言:javascript
复制
Sub RMBR()
  Dim infile As String
  Dim part As String * 19, COMMENT As String * 7, COMMENT2 As String * 2
  Dim TDATE As String * 7, PLANT As String * 1
  Dim source As String
  Dim SELECTION As Integer, i As Integer, c As String
  Dim Result As Single
  Dim excel As Object
  Dim ACELL As Single, BCELL As Single, CCELL As Single, dcell As Single
  Dim Verify As Single

  infile = InputBox$("input FILE NAME INCLUDING PATH?", "FILE NAME", "C:\CFILES\rmbr.XLSX")
  TDATE = InputBox$("Input Status", "TDATE", "CURRENT")
  
  i = 2
  Set excel = CreateObject("EXCEL.APPLICATION")
  excel.Visible = True
  excel.Workbooks.Open FileName:=infile
  Verify = MsgBox("IS THIS THE CORRECT SPREADSHEET?", 4, "VERIFY SPREADSHEET")
  ACELL = "A2"
  BCELL = "B2"
  CCELL = "C2"
  DCELL = "D2"
  
  excel.Range("A1").Select
  excel.activecell.FormulaR1C1 = "PARTNO"
  excel.Range("B1").Select
  excel.activecell.FormulaR1C1 = "RMBR QTY"
  excel.Range("C1").Select
  excel.activecell.FormulaR1C1 = " "
  excel.Range("D1").Select
  excel.activecell.FormulaR1C1 = "TODAY'S DATE"
  excel.Range(ACELL).Select
  part = excel.activecell.FormulaR1C1
  excel.Range(BCELL).Select
  PLANT = excel.activecell.FormulaR1C1
  excel.Range(CCELL).Select
  COMMENT = excel.activecell.FormulaR1C1
  excel.Range(dcell).Select
  COMMENT2 = excel.activecell.FormulaR1C1
  
  Do Until partnumber = "                "
    With Session
      .TransmitTerminalKey rcIBMClearKey
      .WaitForEvent rcKbdEnabled, "30", "0", 1, 1
      .WaitForEvent rcEnterPos, "30", "0", 1, 1
      .TransmitANSI "RMBR"
      .TransmitTerminalKey rcIBMEnterKey
      .WaitForEvent rcKbdEnabled, "30", "0", 1, 1
      '.WaitForEvent rcEnterPos, "30", "0", 2, 6
      .WaitForDisplayString "FN:", "30", 2, 2
      .MoveCursor 4, 11
      .TransmitANSI part
      .TransmitTerminalKey rcIBMEnterKey
      .WaitForEvent rcKbdEnabled, "30", "0", 1, 1
      Date = .GetDisplayText(4, 73, 8)
      RIP.Date = .GetDisplayText(9, 73, 8)
      
      Dim n As Integer
      For n = 9 To 22
        Do Until Date = RIP.Date
          Date = .GetDisplayText(9, 73, 8)
          RIP.Date = .GetDisplayText(n, 73, 8)
        Loop
        If Date = RIP.Date Then
          Result = .GetDisplayText(n, 32, 6)
          excel.Range(BCELL).Select
          excel.activecell.FormulaR1C1 = Result
        End If
        If Date <> RIP.Date Then
          .TransmitTerminalKey rcIBMEnterKey
        End If
        Do Until Date = RIP.Date
          Date = .GetDisplayText(9, 73, 8)
          RIP.Date = .GetDisplayText(n, 73, 8)
        Loop
        Do Until RIP.Date = "        "
        Loop
        
        i = i + 1
        c = Trim$(Str$(i))
        ACELL = "A" + c
        BCELL = "B" + c
        CCELL = "C" + c
        excel.Range(ACELL).Select
        part = excel.activecell.FormulaR1C1
        excel.Range(BCELL).Select
        PLANT = excel.activecell.FormulaR1C1
        excel.Range(CCELL).Select
        COMMENT = excel.activecell.FormulaR1C1
        excel.Range(dcell).Select
        COMMENT2 = excel.activecell.FormulaR1C1
    End With
End Sub
EN

回答 1

Stack Overflow用户

发布于 2020-06-24 17:08:37

您的代码中有相当多的问题,让我们来看看:

有很多这样的东西:

代码语言:javascript
复制
  excel.Range("A1").Select
  excel.activecell.FormulaR1C1 = "PARTNO"

您可以将其替换为(可读性更好):

代码语言:javascript
复制
  excel.Range("A1").FormulaR1C1 = "PARTNO"

首先:

代码语言:javascript
复制
  i = 2
  ACELL = "A2"

之后的版本:

代码语言:javascript
复制
i = i + 1
c = Trim$(Str$(i))
ACELL = "A" + c

您也可以在开头使用它,因此将第一个替换为:

代码语言:javascript
复制
i = 2
c = Trim$(Str$(i))
ACELL = "A" + c

For-loop未结束:

代码语言:javascript
复制
For n = 9 To 22
...
(Where's the Next, or the Step?)

可能的死循环:

代码语言:javascript
复制
Do Until RIP.Date = "        "
Loop
(Two things: this is a possible endless loop, and second, what's with the list of spaces? You'd better say "... until Trim$(RIP.Date) = """)

此外,大循环也没有结束:

代码语言:javascript
复制
Do Until partnumber = "                "
(same comment as above)

请进一步更正您的代码(因为您的代码甚至不能编译,所以几乎不可能进一步帮助您)。

最重要的是,我看到你混合了小写字母和大写字母。在Excel中,这不是问题,但其他编程语言可能会有问题。请养成对所有变量使用相同的“大写”系统的好习惯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52010936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档