【问题标题】:User-entered number of pages to print in MS Access VBA在 MS Access VBA 中用户输入的打印页数
【发布时间】:2025-11-25 21:50:02
【问题描述】:

是否可以让用户在表单上输入他们希望打印的所需页数,并能够在每页上打印“第 X 页,共 Y 页”?

我有一个小型运输标签应用程序,它需要为任何给定的货件打印动态数量的标签,并由用户输入。

用于标签信息的数据是从下面的存储过程中返回的

SELECT C1.CompanyName,
        C1.Address1,
        C1.Address2,
        C1.City,
        C1.Province,
        C1.PostalCode,
        C2.CustomerName,
        C2.ShippingAddress1,
        C2.ShippingAddress2,
        C2.ShippingAddress3,
        C2.ShippingAddress4,
        C2.City,
        C2.Province,
        C2.PostalCode
FROM MyCompany_tb C1,
    Customer_tb C2
WHERE C2.CustomerID = @CUSTOMER_ID
    AND C2.InvoiceNumber = @INVOICE_NUMBER

这将生成一条包含我公司“退货地址”信息 (C1) 的记录,并将其与客户的运输信息 (C2) 配对。得到的标签 打印需要打印出“Box 1 of 3”、“Box 2 of 3”等,具体取决于用户输入的值。

我找到了this article,但我更愿意这样做而不在 Access 中创建“临时表”。这样的事情可能吗?

【问题讨论】:

    标签: sql vba ms-access printing


    【解决方案1】:

    您需要一个额外的表,但它可以是一个简单的number table,其中一个 LongInt 列 ID 带有数字 1..n

    然后使用笛卡尔积得到你想要的记录数。

    在 VBA 中:

    ' lngNumRecords is the number entered by the user
    TempVars.Add "NumRecords", lngNumRecords
    

    查询:

    SELECT YourQuery.*, "Box " & [tblNumbers].[ID] & " of " & [TempVars]![NumRecords] AS BoxNo
    FROM YourQuery, tblNumbers
    WHERE tblNumbers.ID <= [TempVars]![NumRecords]
    

    没有 JOIN,因此您可以根据指定的 ID 多次复制主记录。

    这假设 YourQuery 只返回一条记录。

    【讨论】: