2008-11-02 42 views
7

Tôi đang tự viết một ứng dụng nhanh - dự án đầu tiên, tuy nhiên tôi đang cố gắng tìm mã VBA để viết kết quả của chuỗi đầu vào vào ô được đặt tên trong Excel.VBA Excel macro viết một số nguyên đầu vào vào một ô

Ví dụ: hộp nhập sẽ hỏi câu hỏi "Bạn muốn thêm số công việc nào vào danh sách?" ... sau đó người dùng sẽ nhập số tham chiếu như "FX1234356". Sau đó, macro cần viết thông tin đó vào một ô, sau đó tôi có thể sử dụng để hoàn thành macro (về cơ bản là tìm kiếm trong một số dữ liệu).

+2

Tiêu đề câu hỏi gây hiểu lầm. Dữ liệu nhập của bạn không phải là số nguyên. –

Trả lời

10

Bạn có thể sử dụng đối tượng Phạm vi trong VBA để đặt giá trị của ô được đặt tên, giống như bất kỳ ô nào khác.

Range("C1").Value = Inputbox("Which job number would you like to add to the list?) 

đâu "C1" là tên của ô bạn muốn cập nhật.

Excel VBA của tôi hơi cũ và có nhiều bụi, vì vậy có thể có cách tốt hơn để thực hiện việc này trong các phiên bản Excel mới hơn.

+0

bạn chỉ cần đánh tôi với nó;) – JimmyJ

+1

Cảm ơn bạn đã xác minh nó cho tôi. Tôi ghét gửi mã cũ và có thể có ai đó đi vào và nói "Yeah, trở lại vào những năm 1900 bạn có thể đã làm theo cách đó, nhưng bây giờ ...". :) –

0

Tôi đã thực hiện loại điều này với biểu mẫu có chứa Hộp văn bản.

Vì vậy, nếu bạn muốn đặt trong này nói tế bào H1, sau đó sử dụng:

ActiveSheet.Range("H1").Value = txtBoxName.Text

4

Tôi khuyên bạn nên luôn luôn sử dụng một loạt tên (như bạn đã gợi ý bạn đang làm) vì nếu có cột hoặc hàng được thêm vào hoặc xóa, tham chiếu tên sẽ cập nhật, trong khi nếu bạn mã cứng tham chiếu ô (ví dụ "H1" như được đề xuất trong một trong các phản hồi) trong VBA, thì nó sẽ không cập nhật và sẽ trỏ đến ô sai.

Vì vậy

Range("RefNo") = InputBox("....") 

là an toàn hơn

Range("H1") = InputBox("....") 

Bạn có thể thiết lập giá trị của một vài tế bào, quá.

Range("Results").Resize(10,3) = arrResults() 

trong đó arrResults là mảng của ít nhất 10 hàng & 3 cột (và có thể là bất kỳ loại nào). Nếu bạn sử dụng điều này, hãy đặt số này

Option Base 1 

ở đầu mô-đun VBA, nếu không VBA sẽ giả sử mảng bắt đầu bằng 0 và đặt hàng và cột đầu tiên trống trong trang tính. Dòng này làm cho tất cả các mảng bắt đầu ở mức 1 dưới dạng mặc định (có thể bất thường ở hầu hết các ngôn ngữ nhưng hoạt động tốt với bảng tính).

1

Khi yêu cầu người dùng trả lời để đưa vào ô bằng cách sử dụng InputBox method, thường có ba điều có thể xảy ra¹.

  1. Người dùng nhập thứ gì đó vào và nhấp vào OK. Đây là những gì bạn mong đợi xảy ra và bạn sẽ nhận được đầu vào trở lại có thể được trả về trực tiếp cho một ô hoặc một biến được khai báo.
  2. Người dùng nhấp chuột Hủy, nhấn Esc hoặc nhấp chuột× (Close).Giá trị trả về là boolean False. Điều này cần được tính toán.
  3. Người dùng thực hiện không nhập bất kỳ thứ gì nhưng nhấp vào OK bất kể. Giá trị trả về là một chuỗi có độ dài bằng không.

Nếu bạn đặt giá trị trả về vào ô, luồng logic của riêng bạn sẽ quyết định điều bạn muốn làm trong hai trường hợp sau. Bạn có thể muốn xóa các tế bào hoặc bạn có thể muốn để lại các nội dung di động một mình. Đây là cách xử lý các kết quả khác nhau với biến kiểu biến thể và Select Case statement.

Dim returnVal As Variant 

    returnVal = InputBox(Prompt:="Type a value:", Title:="Test Data") 

    'if the user clicked Cancel, Close or Esc the False 
    'is translated to the variant as a vbNullString 
    Select Case True 
     Case Len(returnVal) = 0 
      'no value but user clicked OK - clear the target cell 
      Range("A2").ClearContents 
     Case Else 
      'returned a value with OK, save it 
      Range("A2") = returnVal 
    End Select 

¹ Có một kịch bản thứ tư khi một loại hình cụ thể của InputBox method được sử dụng. Một InputBox có thể trả về công thức, lỗi phạm vi ô hoặc mảng. Đó là những trường hợp đặc biệt và yêu cầu sử dụng các tùy chọn cú pháp rất cụ thể. Xem liên kết được cung cấp để biết thêm.

Các vấn đề liên quan